package com.xyoto.community.mapper.main;

import com.xyoto.community.dto.DynamicSearchConditionDTO;
import com.xyoto.community.entity.comment.DynamicComment;
import com.xyoto.community.entity.comment.DynamicCommentReply;
import com.xyoto.community.entity.main.Dynamic;
import com.xyoto.community.po.MyDynamicListPO;
import com.xyoto.community.po.TopicHotNumPO;
import com.xyoto.community.po.TotalDynamicListPO;
import com.xyoto.community.po.TotalMessageDynamicListPO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 动态表mapper
 */
public interface DynamicMapper {

    /**
     * 获取动态个数通过话题id
     *
     * @param topicId 话题id
     * @param status  动态状态非私密
     * @return 动态个数
     */
    Integer countDynamicByTopicIdAndStatusAndPersonal(Integer topicId, short status, short personal);

    /**
     * 根据话题id统计话题下的动态数
     *
     * @param topicId 话题id
     * @return
     */
    Integer countDynamicByTopicId(Integer topicId);

    /**
     * 获取热门话题总动态
     *
     * @param list
     * @return
     */
    List<TopicHotNumPO> getHotTopicDynamicCount(List<TopicHotNumPO> list);

    /**
     * 根据一组动态id查询动态详情
     *
     * @param dynamicIdList
     * @return
     */
    List<Dynamic> selectListBatchDynamicIds(@Param("dynamicIdList") List<Integer> dynamicIdList);

    /**
     * 新增动态Web接口
     *
     * @param dynamic 动态对象
     * @return 主键id
     */
    Integer insertDynamic(Dynamic dynamic);

    /**
     * 修改动态信息
     *
     * @param dynamic 动态对象
     * @return 影响行数
     */
    Integer updateDynamicById(Dynamic dynamic);

    /**
     * 根据动态id查询动态详情
     *
     * @param dynamicId
     * @return
     */
    Dynamic selectOneByDynamicId(Integer dynamicId);

    /**
     * 根据动态id获取动态详情
     *
     * @param dynamicId 动态id
     * @return
     */
    Dynamic getDynamicById(Integer dynamicId);

    /**
     * 删除动态id删除动态
     *
     * @param dynamic 实体
     * @return
     */
    Integer removeDynamic(Dynamic dynamic);


    /**
     * 删除动态评论
     *
     * @param deleteStatus 删除状态
     * @param dynamicId    动态id
     * @return
     */
    Integer removeDynamicCommentByDynamicId(Short deleteStatus, Integer dynamicId);

    /**
     * 删除动态评论回复
     *
     * @param deleteStatus     删除状态
     * @param dynamicCommentId 动态评论id
     * @return
     */
    Integer removeDynamicCommentReplyByDynamicCommentId(Short deleteStatus, Integer dynamicCommentId);

    /**
     * 根据动态评论id删除动态评论
     *
     * @param deleteStatus     删除状态
     * @param dynamicCommentId 动态评论id
     * @return
     */
    Integer removeDynamicCommentByDynamicCommentId(Short deleteStatus, Integer dynamicCommentId);

    /**
     * 根据动态评论id获取动态详情
     *
     * @param dynamicCommentId 动态评论id
     * @return
     */
    DynamicComment getDynamicCommentByDynamicCommentId(Integer dynamicCommentId);

    /**
     * 根据id获取动态评论回复详情
     *
     * @param dynamicCommentReplyId 动态评论回复id
     * @return
     */
    DynamicCommentReply getDynamicCommentReply(Integer dynamicCommentReplyId);

    /**
     * 查询全部动态列表
     *
     * @param endIndexId
     * @param endIndexId 第一页第一条的id值
     * @return 全部动态的列表数据
     */
    List<TotalDynamicListPO> getTotalDynamicList(Integer endIndexId);


    /**
     * 根据热门动态id 查询热门动态列表数据
     *
     * @param dynamicIds
     * @return
     */
    List<TotalDynamicListPO> getHotDynamicList(List<Integer> dynamicIds);

    /**
     * 动态是否存在
     *
     * @param dynamicId    动态id
     * @param deleteStatus 删除状态
     * @return 个数
     */
    Integer isExistByDynamicId(Integer dynamicId, Short deleteStatus, Short personalStatus);

    /**
     * 获取动态id集合
     *
     * @param topicId 话题id
     * @return
     */
    List<Integer> getDynamicIdList(Integer topicId);


    /**
     * 获取动态信息
     *
     * @param dynamicIds 动态id集合
     * @return TotalMessageDynamicListPO
     */
    List<TotalMessageDynamicListPO> getDynamicListByIds(List<Integer> dynamicIds);

    /**
     * 查询我的动态列表
     *
     * @param endIndexId
     * @return
     */
    List<MyDynamicListPO> getMyDynamicList(Integer endIndexId, Integer userId, Integer status);

    /**
     * 根据话题id查询话题下的全部动态列表
     *
     * @param endIndexId
     * @param topicId
     * @param
     * @return
     */
    List<TotalDynamicListPO> getTopicAllDynamic(Integer endIndexId, Integer topicId);

    /**
     * 更新动态的私密状态
     *
     * @param dynamicId
     * @param personal
     * @return
     */
    Integer updateDynamicSecretStatus(Integer dynamicId, Short personal);

    /**
     * 根据条件查询动态id
     *
     * @param topicId
     * @param content
     * @param endIndexId
     * @return
     */
    List<TotalDynamicListPO> getDynamicListByCondition(Integer endIndexId, Integer topicId, String content);

    /**
     * 根据动态的删除状态和私密状态来统计动态的数量
     * @author 廖振辉
     * @param deleteStatus
     * @return {@link Integer}
     */
    Integer countDynamicByStatusAndPersonal(@Param("deleteStatus") short deleteStatus, @Param("personal") short personal);

    /**
     * 查询话题下，可以公共展示的话题数目
     * @param topicId
     * @return
     */
    Integer countExposeDynamicByTopicId(Integer topicId);


    List<Dynamic> getAllDynamic(Short deleteStatus);

    List<Dynamic> getAll(short deleteStatus);
}
